package com.itec.learn.spring.aop;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.logging.Logger;

/**
 * 使用JDK动态代理
 * @author chenyiqun
 */
public class LogHandler implements InvocationHandler {

    private Logger logger = Logger.getLogger(getClass().getName());

    private Object delegate;//目标对象

    public Object bind(Object delegate){
        this.delegate = delegate;
        return Proxy.newProxyInstance( //返回代理类
                delegate.getClass().getClassLoader(),//返回类装载器
                delegate.getClass().getInterfaces(),//返回类所实现的接口
                this);//代表实现了InvocationHandler接口的一个对象，这里传入的是自身
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        logger.info(method.getName()+" method2 starts...");
        Object result = method.invoke(delegate,args);
        logger.info(method.getName()+" method2 ends...");
        return result;
    }
}
